package com.example.toy.core.dataset;

import com.example.toy.core.engine.EngineContext;
import com.example.toy.core.function.SerializableFunction;
import com.example.toy.core.function.SerializablePairFunction;

import java.util.Iterator;
import java.util.List;

/**
 * @author shenb
 * @date 2021-12-20 20:57
 */
public interface BigCollection<T> {
  EngineContext getContext();

  <R> BigCollection<R> map(SerializableFunction<T, R> map);

  List<T> collect();

  BigCollection<T> union(BigCollection<T> r);

  <K, V> BigPairCollection<K, V> mapToPair(SerializablePairFunction<T, K, V> map);

  <K> BigPairCollection<K, Iterable<T>> groupBy(SerializableFunction<T, K> map);

  <R> BigCollection<R> flatMap(SerializableFunction<T, Iterator<R>> map);
}
